package com.tedu.API.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;

/**
 * listFiles(接口：Filter)   重载
 * 作用：按照“指定的规则”获取对应文件/文件夹
 *
 * Filter接口---专门给listFiles方法提供：过滤文件夹或者文件【指定规则】
 * accept()从每个File的文件中判断，拿到【具体逻辑】的文件
 *
 * 需求：获取  API  项目下  所有子项【文件和文件夹】，获取src文件
 *      指定规则：验证是s开头的就是src
 *
 * 作业：FileFilter接口按照  匿名内部类  方式  实现，功能如上需求！
 *  接口： FileFilter  ff=new  new FileFilter(){ accept() }
 *  提示：创建FileFilter接口--匿名内部类
 *  File Filter ff=new FileFilter();
 */
public class FilterAPI {
    //主方法：./ 路径指定根级
    public static void main(String[] args) throws IOException {
        //1.创建File文件类 : 获取当前 API 文件夹  路径：./
        File file=new File("."+File.separator+"API");
        System.out.println(file.getCanonicalPath());
        //4.创建FileFilter接口对象----无法直接创建：实现类--实现--接口【创建】
//        MyFilter my=new MyFilter();
       FileFilter ff=new FileFilter(){

           public boolean accept(File pathname) {
               String name=pathname.getName();
               System.out.println("过滤出来的文件夹名字是："+name);
               return name.startsWith("A");
           }
       };

        //2.获取文件夹下的所有“子项：所有的文件和文件夹”
        File[] subs=file.listFiles(ff);
        //3.打印子项下所有名字
        for (int i=0;i<subs.length;i++){//i  下标   从0开始
            System.out.println("所有文件和文件夹的名字："+subs[i].getName());
        }
    }
    //单元测试：./ 路径指定父级
//    @Test
//    public void test01() throws IOException {
//        //创建File文件类 : 获取当前 API 文件夹  路径：./
//        File file=new File("."+File.separator);
//        System.out.println(file.getCanonicalPath());
//    }

}
/**
 * 创建实现类---实现--FileFilter接口---对象创建
 */
//class MyFilter implements FileFilter {
//    //accept(File pathname)
//    //传入参数：File pathname--获取所有需要过滤文件
//    //作用：添加过滤条件，将获取所有需要过滤文件，逐一过滤，
//    // 【条件：规则---开发者指定】条件满足返回true，输出，条件不满足反之
//    public boolean accept(File pathname) {
//        //添加规则：文件或者文件是 s 开头---过滤
//        //①获取所有文件的名字
//        String name=pathname.getName();  //文件夹：src  字符串
//        //②过滤以 s 开头的文件夹
//        // 字符串：startWith("s")  返回值：boolean
//        // 作用：验证字符串首字符是不是匹配的字符,如果匹配：true，反之不匹配
//        //③打印过滤出现字符串
//        System.out.println("过滤出来的文件夹名字是："+name);
//        return name.startsWith("s");
//    }
//}

